import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const user_key = 'user'
const user_time = 'user_time'
const useValidTime = 60 * 60 * 60 *1000; //毫秒 设置用户过期时长 测试3分钟

const user = new Vuex.Store({
  // 全局变量
  state: {
    userInfo: null
  },
  getters: {
    userInfo: function (state) {
      if (!state.userInfo) {
        //获取内存用户信息
        let info = JSON.parse(localStorage.getItem(user_key))
        if(info)
        {
          //获取用户登录时间
          let strtime =  localStorage.getItem(user_time)
          if(strtime)
          {
            //计算过期时间
            let vaildtime = Number(strtime) + useValidTime
            let timespan = Date.parse(new Date())

            console.log(vaildtime + ',' + timespan)
            if(timespan < vaildtime)
            {
              console.log("用户未过期")
              state.userInfo = info;
              return state.userInfo
            }
          }

          console.log("用户已过期")
          localStorage.setItem(user_key, null);
        }
      }
      return state.userInfo
    }
  },
  // 修改全局变量必须通过mutations中的方法
  // mutations只能采用同步方法
  mutations: {
    login (state, payload) {
      state.userInfo = payload
      localStorage.setItem(user_key, JSON.stringify(payload));
      //保存 用户登录时间
      let timespan = Date.parse(new Date())
      localStorage.setItem(user_time, timespan);
    },
    logout (state) {
      state.userInfo = null
      localStorage.setItem(user_key, null);
    }
  },
  // 异步方法用actions
  // actions不能直接修改全局变量，需要调用commit方法来触发mutation中的方法
  actions: {
    login (context, payload) {
      context.commit('login', payload)
    },
    logout (context) {
      context.commit('logout')
    }
  }
})

export default user
